home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 12 / CU Amiga Magazine's Super CD-ROM 12 (1997)(EMAP Images)(GB)[!][issue 1997-07].iso / CUCD / Games / DestructivePoker / sources / sources.lha / pokergadgets.h < prev    next >
C/C++ Source or Header  |  1997-02-20  |  7KB  |  265 lines

  1. /*
  2.         pokergadgets.h
  3.  
  4.         V1.00 - 201196  Kimmo Teräväinen
  5.         -----   ------  ----------------
  6.         V0.01   201196  Started...
  7.         V0.10   281196  Added PrefsBet & PresfHandgadgets
  8.         V0.20   051296  PrefsGadgets ready and tested.
  9.         V0.30   260197  Added Double-gadgets
  10.         V0.40   040297  Made cGTGadgets more simple and flexible.
  11.                         And more buggy...
  12.         V0.41   050297  BUG FOUND: For Some Odd reason Window Must be closed
  13.                         before calling destructor of cGTGadgets.
  14.                         Therefore cDoubleGadgets tried to draw to window
  15.                         that does not exists.
  16. */
  17.  
  18. #ifndef DC1_POKER_GADGETS
  19. #define DC1_POKER_GADGETS
  20.  
  21. #include <inline++/gadtools.h>
  22. #include <libraries/gadtools.h>
  23. #include <stdlib.h>
  24.  
  25. #include "IDCMP.h"
  26. #include "game.h"
  27. #include "radiogroup.h"
  28.  
  29.  
  30. const UWORD GADGET_SHUFFLE = 100;       // Gadget IDs
  31. const UWORD GADGET_FINISH  = 101;
  32. const UWORD GADGET_BET     = 102;
  33. const UWORD GADGET_OK      = 103;
  34. const UWORD GADGET_CANCEL  = 104;
  35. const UWORD GADGET_SMALL   = 105;
  36. const UWORD GADGET_BIG     = 106;
  37.  
  38. const UWORD STRING_CHANGES = 201;
  39. const UWORD STRING_JOKERS  = 202;
  40.  
  41.  
  42. // Button like gadget specification
  43. //
  44. struct cButton {
  45.   UWORD id;
  46.   WORD left,top,width,height;
  47.   const char *text;
  48.   cButton(UWORD nid,WORD nleft,WORD ntop,WORD nwidth,WORD nheight,const char *ntext) :
  49.     id(nid),top(ntop),left(nleft),
  50.     width(nwidth),height(nheight),
  51.     text(ntext)
  52.   {
  53.   }
  54. };
  55.  
  56. // string like gadget specification
  57. //
  58. struct cStringGadget {
  59.   UWORD id;
  60.   WORD left,top,width,height,
  61.        buffersize;
  62.   const char *text,*string;
  63.  
  64.   cStringGadget(UWORD nid,WORD nleft,WORD ntop,WORD nwidth,WORD nheight,const char *ntext,const char *nstring,WORD nsize) :
  65.     id(nid),top(ntop),left(nleft),
  66.     width(nwidth),height(nheight),
  67.     text(ntext),string(nstring),
  68.     buffersize(nsize)
  69.   {
  70.   }
  71. };
  72.  
  73.  
  74.  
  75. // GadTools gadget object
  76. //
  77.  
  78. class cGTGadgets : public cIDCMP {
  79.   void   *vinfo;
  80.   Gadget *glist,*nxgad;
  81.   static TextAttr textattr;
  82. protected:
  83.   Window *wnd;
  84.  
  85.   Gadget *AddButton(const cButton &);
  86.   Gadget *AddStringGadget(const cStringGadget &);
  87.  
  88.   void AddButtons(const cButton *);
  89.   void AddStringGadgets(const cStringGadget *);
  90.  
  91.   void Attach() {
  92.     AddGList(wnd,glist,0,-1,NULL);
  93.     RefreshGList(glist, wnd, NULL, -1);
  94.   }
  95.  
  96.   void DeAttach() {
  97.     RemoveGList(wnd,glist,-1);
  98.   }
  99. public:
  100.   cGTGadgets(Window *Wnd) : wnd(Wnd) {
  101.     nxgad=CreateContext(&glist);
  102.     vinfo=GetVisualInfo(wnd->WScreen, TAG_END) ;
  103.   }
  104.   virtual ~cGTGadgets() {
  105.     FreeGadgets(glist);
  106.     if(vinfo) FreeVisualInfo(vinfo);
  107.   }
  108.  
  109.   Gadget *Gadgets() const { return glist; }
  110.   operator Gadget*() const { return glist; }
  111.   operator ULONG() const { return (ULONG)glist; }
  112.  
  113.   virtual int Active() const { return FALSE; }
  114. };
  115.  
  116.  
  117. //**************************************************************************
  118. class cPokerGadgets : public cGTGadgets {
  119.   cGamePoker *game;
  120.   static const cButton PokerButtons[];
  121. public:
  122.   cPokerGadgets(Window *Wnd,cGamePoker *ngame) :
  123.     game(ngame),
  124.     cGTGadgets(Wnd)
  125.   {
  126.     AddButtons(PokerButtons);
  127.     Attach();
  128.     GT_RefreshWindow(wnd, NULL);
  129.   }
  130.  
  131.   virtual int IDCMP(const IntuiMessage *msg);
  132. };
  133.  
  134.  
  135. //**************************************************************************
  136. class cPrefsHandGadgets : public cGTGadgets {
  137.   cHandPile *hand;
  138.   cRadioGroup radio5jokers,radio5ofkind;
  139.   int GadgetOK();
  140.   static const cButton PrefsHandButtons[];
  141. public:
  142.   cPrefsHandGadgets(Window *Wnd,cHandPile *nhand) :
  143.     cGTGadgets(Wnd),
  144.     radio5jokers(Wnd,20,20,340,32),
  145.     radio5ofkind(Wnd,20,60,340,32),
  146.     hand(nhand)
  147.   {
  148.     AddButtons(PrefsHandButtons);
  149.     Attach();
  150.     GT_RefreshWindow(wnd, NULL);
  151. #if 1
  152.     radio5jokers.Add((const UBYTE*)"5 jokers are best possible",TRUE, 1,14);
  153.     radio5jokers.Add((const UBYTE*)"5 jokers are lousy hand"   ,FALSE, 1, 1);
  154.     if(hand->GetPrefs_5jokers()) radio5jokers.Select(1);
  155.     radio5ofkind.Add((const UBYTE*)"5 of kind is better than straight flush",TRUE, 1,14);
  156.     radio5ofkind.Add((const UBYTE*)"5 of kind is lower than straight flush" ,FALSE, 1, 1);
  157.     if(hand->GetPrefs_5ofkind()) radio5ofkind.Select(1);
  158. #endif
  159.   }
  160.  
  161.   virtual int IDCMP(const IntuiMessage *msg);
  162. };
  163.  
  164.  
  165.  
  166. //**************************************************************************
  167. class cPrefsBetGadgets : public cGTGadgets {
  168.   Gadget *changes,*jokers;
  169.   cGamePoker *game;
  170.  
  171.   static const cButton PrefsBetButtons[];
  172.   static const cStringGadget PrefsBetStringGads[];
  173.  
  174.   int GadgetOK();
  175. protected:
  176.   void SetGadgetString(Gadget *gad,const char c)
  177.   {
  178.     UBYTE *buffer=((struct StringInfo *)(gad->SpecialInfo))->Buffer;
  179.  
  180.     buffer[1]=0;
  181.     buffer[0]=c;
  182.     ((struct StringInfo *)(gad->SpecialInfo))->BufferPos = 0;
  183.     ((struct StringInfo *)(gad->SpecialInfo))->DispPos   = 0;
  184.  
  185.     RefreshGList(gad,wnd,NULL,1);
  186.   }
  187.  
  188.   char GetGadgetString(Gadget *gad) {
  189.     return ((struct StringInfo *)(gad->SpecialInfo))->Buffer[0];
  190.   }
  191. public:
  192.   cPrefsBetGadgets(Window *Wnd,cGamePoker *ngame) :
  193.     cGTGadgets(Wnd),
  194.     game(ngame)
  195.   {
  196.     AddButtons(PrefsBetButtons);
  197.     changes=AddStringGadget(PrefsBetStringGads[0]);
  198.     jokers=AddStringGadget(PrefsBetStringGads[1]);
  199.     Attach();
  200.  
  201.     SetGadgetString(changes,game->Changes()+'0'); // Aseta tekstit
  202.     SetGadgetString(jokers,game->Jokers()+'0');   // gadgetteihin
  203.     GT_RefreshWindow(wnd, NULL);                  // ja päivitä
  204.   }
  205.  
  206.   virtual int IDCMP(const IntuiMessage *msg);
  207. };
  208.  
  209.  
  210. //**************************************************************************
  211. class cDoubleGadgets : public cGTGadgets {
  212.   cGamePoker *game;
  213.   cIMGCard *card;
  214.   int win;
  215.   static const cButton DoubleButtons[];
  216.  
  217.   int GadgetSmall();
  218.   int GadgetBig();
  219. protected:
  220. public:
  221.   cDoubleGadgets(Window *Wnd,cGamePoker *ngame,int Win) :
  222.     cGTGadgets(Wnd),
  223.     game(ngame),
  224.     card(NULL),
  225.     win(Win)
  226.   {
  227.     AddButtons(DoubleButtons);
  228.     Attach();
  229.     GT_RefreshWindow(wnd, NULL);
  230.     CreateCard();
  231.   }
  232.   ~cDoubleGadgets() { DeleteCard(); }
  233.  
  234.   void CreateCard() {
  235.     int id=rand()%(52+game->Jokers());
  236.     DeleteCard();
  237.     card=new cIMGCard(wnd,game->Gfx(),cPoint(65,30),cCard(id));
  238.     if(card) {
  239.       card->Turn_CoverDown();
  240.       card->Show();
  241.     }
  242.   }
  243.   void DeleteCard() { if(card) delete card; card=NULL; }
  244.  
  245.   virtual int IDCMP(const IntuiMessage *msg);
  246. };
  247.  
  248. //**************************************************************************
  249. class cReqGadgets : public cGTGadgets {
  250.   static const cButton ReqButtons[];
  251. protected:
  252. public:
  253.   cReqGadgets(Window *Wnd) :
  254.     cGTGadgets(Wnd)
  255.   {
  256.     AddButtons(ReqButtons);
  257.     Attach();
  258.     GT_RefreshWindow(wnd, NULL);
  259.   }
  260.  
  261.   virtual int IDCMP(const IntuiMessage *msg);
  262. };
  263.  
  264.  
  265. #endif